using UnityEngine;

namespace Framework.DataTable
{
    public interface IDataTableLoader
    {
        //表名
        string GetTableName();
        //加载文件名
        string FileName { get; }
        string Branch { get; set; }
        bool ExistBranch(string value);
        int ItemCount { get; }
        //设置每帧解析条目数量，如果数量太大，解析时一帧申请的内存太大，可以把数量设置少一点
        void SetDecodeCountPreFrame(int count);
        //一次解析完，如果数量太多，可以不用解析具体内容
        /// <summary>
        /// 如果立即解析完没可直接使用数据
        /// 否则要把数据的key和索引缓存起来,使用时再通过 GetItem 解析
        ///  var len = this.ItemCount;
        ///  for (int i = 0; i < len; i++)
        ///  {
        ///      _buffer.SetPosition(readItemPosition(i));//设置数据位置
        ///      var key = _buffer.ReadString();//读取key值
        ///      _keyToIndex.Add(key, i);//数据位置和key关联
        ///  }
        /// </summary>
        /// <returns>是否一次解析完</returns>
        bool LazyDecode();
        //读取文件头
        void ReadHeader(ByteArray buffer);
        /// <summary>
        /// 解析条目
        /// 返回还剩的数量
        /// </summary>
        /// <returns>剩余条目数量</returns>
        int TryDecode();
        bool LoadSuccess();
        
#if UNITY_EDITOR
        void EditorClear();
        //编辑器下解析文件
        object ParseItem(string[] values);
        //编辑器下序列化
        void Encode(ByteArray buffer);
#endif
    }
}